#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Time          : 2024/4/26 10:56
# File          : kafka_consumer.py
# @Author       : MingTai
# @Department   : automation_qa
import json
import os


def read_json(file_path):
    """
    读取json格式文件
    file_path: 文件绝对路径
    """
    with open(file_path, 'r') as fp:
        data = json.load(fp)
    return data


def write_json(file_path, data):
    """
    向文件写入json格式数据
    file_path: 文件绝对路径
    data: 写入数据
    """
    with open(file_path, 'w') as fp:
        json.dump(data, fp, indent=2)


def read_file_per_line(file_path):
    """
    按行读取文件并放入list中返回
    file_path: 文件绝对路径
    """
    result = list()
    with open(file_path, 'r') as f:
        for line in f:
            result.append(line)
    return result


def file_check_and_create(file_path):
    """
    检查文件夹是否存在，不存在自动创建
    file_path: 文件夹绝对路径
    """
    if not os.path.exists(file_path):
        os.makedirs(file_path)


def file_check(file_path):
    """
    检查文件夹是否存在
    file_path: 文件夹绝对路径
    """
    res = os.path.exists(file_path)
    return res


def is_file(file_path):
    """
    检查是否为文件
    file_path: 文件夹绝对路径
    """
    res = os.path.isfile(file_path)
    return res


def is_dir(file_path):
    """
    检查是否为文件夹
    file_path: 文件夹绝对路径
    """
    res = os.path.isdir(file_path)
    return res


def get_all_files(file_path):
    """
    获取文件夹下所有文件和文件夹
    file_path: 文件夹绝对路径
    """
    return os.listdir(file_path)


def get_all_path_files(file_path) -> list:
    """
    获取文件夹下及其所有子文件夹下的所有文件
    file_path: 文件夹绝对路径
    """
    all_files = []
    for root, dirs, files in os.walk(file_path):
        # print("当前目录：", root)
        # print("子目录列表：", dirs)
        # print("文件列表：", files)
        for file in files:
            all_files.append(f"{root}/{file}")
    return all_files


def get_root_path():
    """
    获取工程根目录
    """
    cur_path = os.path.abspath(os.path.dirname(__file__))
    return cur_path[:cur_path.find('ltest_tools_service') + len('ltest_tools_service')]


def get_file_size(file_path):
    """
    获取文件大小
    """
    stats = os.stat(file_path)
    return convert_bytes(int(stats.st_size))


def convert_bytes(size):
    """
    字节大小换算
    size: 字节大小
    """
    for x in ['bytes', 'KB', "MB", "GB", "TB"]:
        if size < 1024.0:
            return "%3.1f %s" % (size, x)
        size /= 1024.0
    return size


def remove_dirs(file_path):
    try:
        if file_check(file_path) is True:
            dirs = get_all_files(file_path)
            if len(dirs) != 0:
                for file in dirs:
                    res = os.path.join(file_path, file)
                    if is_file(res):
                        os.remove(res)
                    else:
                        if is_dir(res):
                            # 先删除目录下的file,最后删除文件夹
                            remove_dirs(res)
            os.rmdir(file_path)
        return True
    except Exception as e:
        print("remove dirs except, detail: {}".format(e))
        return False
